const { isValidElement } = require("react");

//let s = "([{}])"; //123321
let s = "()[]{}"; //112233
//字符串从中间分开，左边入栈，依次出栈  //字符串从左往右但凡是朝左的括号，但凡是朝右的括号就出栈一个元素
//每一个出栈的元素都到 obj中查找另一半
//在和右边比较

function isValid(s) {
  const stack = [];

  for (let i = 0; i < s.length; i++) {
    const char = s[i];

    // 检查是否为左括号
    if (char === "(" || char === "[" || char === "{") {
      stack.push(char);
    }
    // 检查是否为右括号
    else if (char === ")" || char === "]" || char === "}") {
      // 如果栈为空，无法匹配
      if (stack.length === 0) {
        return false;
      }

      // 弹出栈顶元素
      const last = stack.pop();

      // 检查是否匹配
      if (
        (char === ")" && last !== "(") ||
        (char === "]" && last !== "[") ||
        (char === "}" && last !== "{")
      ) {
        return false;
      }
    }
  }

  // 如果栈为空，所有括号都正确匹配
  return stack.length === 0;
}

// 测试示例
console.log(isValid("()")); // true
console.log(isValid("()[]{}")); // true
console.log(isValid("(]")); // false
console.log(isValid("([)]")); // false
console.log(isValid("{[]}")); // true
